// 统一错误处理中间件
// 该中间件捕获并处理应用中的各种错误，提供统一的错误响应格式

/**
 * 统一错误处理中间件函数
 * 捕获并处理应用中的各种错误，根据错误类型返回相应的错误响应
 * @param {Error} err - 错误对象
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 * @returns {Object} 标准化的错误响应
 */
const errorHandler = (err, req, res, next) => {
  // JWT认证错误处理
  if (err.name === 'UnauthorizedError') {
    return res.status(401).json({
      status: 1,                    // 状态码，1表示失败
      message: '身份认证失败！',      // 错误消息
      error: err.name               // 错误类型
    });
  }

  // 数据验证错误处理
  if (err.name === 'ValidationError') {
    return res.status(400).json({
      status: 1,                    // 状态码，1表示失败
      message: '数据验证失败',        // 错误消息
      error: err.message            // 错误详情
    });
  }

  // 数据库错误处理
  if (err.name === 'SequelizeDatabaseError') {
    return res.status(500).json({
      status: 1,                    // 状态码，1表示失败
      message: '数据库操作失败',      // 错误消息
      error: err.message            // 错误详情
    });
  }

  // 通用错误处理
  console.error('系统错误:', err);   // 在控制台输出错误详情，便于调试
  
  res.status(500).json({
    status: 1,                      // 状态码，1表示失败
    message: '系统内部错误',          // 错误消息
    // 开发环境显示错误详情，生产环境不显示
    error: process.env.NODE_ENV === 'development' ? err.message : undefined
  });
};

// 导出错误处理中间件
module.exports = errorHandler;